#include "serial.h"


Serial::Serial()
{
    connect(this,SIGNAL(sendSignals(QByteArray)),this,SLOT(sendSlot(QByteArray)));

    //connect(&serialPort,SIGNAL(errorOccurred(QSerialPort::SerialPortError)),this,SLOT(errorSlot(QSerialPort::SerialPortError)));
    //connect(&serialPort,SIGNAL(readyRead()),this,SLOT(readDataSlot()));
}



void Serial::printfInfo()
{
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        qDebug() << "Name : " << info.portName();
        qDebug() << "Description : " << info.description();
        qDebug() << "Manufacturer: " << info.manufacturer();
        qDebug() << "Serial Number: " << info.serialNumber();
        qDebug() << "System Location: " << info.systemLocation();
    }
}

QList<QSerialPortInfo> Serial::getSerialList()
{
    return QSerialPortInfo::availablePorts();
}

void Serial::setRecv(SerialRecv recvFun)
{
    serialRecv = recvFun;
}


Serial::SERIAL_RESULT Serial::open(QSerialPortInfo info,QString Baud)
{
    if(serialPort.isOpen())
    {
        serialPort.close();
    }

    serialPort.setPort(info);

    serialPort.setBaudRate(Baud.toInt());  //波特率
    serialPort.setDataBits(QSerialPort::Data8);     //数据位
    serialPort.setParity(QSerialPort::NoParity);    //无奇偶校验
    serialPort.setStopBits(QSerialPort::OneStop);   //无停止位
    serialPort.setFlowControl(QSerialPort::NoFlowControl);  //无控制

    if(!serialPort.open(QIODevice::ReadWrite))          //读写打开
    {
        qDebug() << "串口打开失败";
        return FAIL;
    }

    return OK;
}

Serial::SERIAL_RESULT Serial::close()
{
    if(serialPort.isOpen())
    {
        serialPort.close();
    }

}

QList<QString> Serial::getBaudList()
{
    QList<QString> list;
    list << "9600"
        <<"14400"<<"19200"<<"38400"<<"56000"<<"57600"
       <<"76800"<<"115200"<<"128000"<<"256000"<<"512000";
    return list;
}

void Serial::readDataSlot()
{
//    if(serialRecv != NULL)
//    {
//        serialRecv(serialPort.readAll());
//    }
//    QByteArray recv = serialPort.readAll();
//    qDebug() << recv.toHex();
}

void Serial::errorSlot(QSerialPort::SerialPortError error)
{
    switch(error)
    {
    case QSerialPort::NoError:
        break;
    case QSerialPort::ResourceError:
    case QSerialPort::DeviceNotFoundError:

        break;
    default:
        break;

    }

    qDebug() << error;
}

void Serial::send(char *buf,int len)
{
    emit sendSignals(QByteArray(buf,len));

}

void Serial::sendSlot(QByteArray arry)
{
    if(serialPort.isOpen())
    {
        QString str = EasyTool::ByteArrayToHexString(arry);
        //qDebug() << "serial send :" << str;
        serialPort.write(arry.data(),arry.length());
    }
}

